Communication systems have usually been constructed by manually defining and implementing modulation and coding algorithms based on analytic models derived with convenient algebraic expressions. In some instances, simplified analytic models are used (e.g., to represent a model for the communications channel). These usual methods for constructing communication systems require manual input, can be inefficient, and often do not accurately account for many effects of real-world communication channels. As such, there is a need for an efficient and automatic method for constructing a communication system that can account for effects of real-world communication channels (e.g., through measurement and adaptation).